package org.yangspring.samples.mvc.simple;

import org.springframework.beans.factory.*;
import org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionReader;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.*;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.context.expression.EnvironmentAccessor;
import org.springframework.context.support.*;
import org.springframework.core.env.*;
import org.springframework.core.io.ResourceLoader;
import org.springframework.http.HttpEntity;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.jndi.support.SimpleJndiBeanFactory;
import org.springframework.security.web.csrf.CsrfFilter;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.context.*;
import org.springframework.web.context.support.*;
import org.springframework.web.filter.*;
import org.springframework.web.multipart.support.MultipartFilter;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionListener;
import java.util.EventListener;

/**
 * Created by whyang on 2017/06/20.
 */


public class PojoFrankie {
    private String foo;
    private String frankie;

    public void setFoo(String foo){
        this.foo = foo;
    }

    public void setFrankie(String frankie){
        this.frankie = frankie;
    }

    public String getFoo(){
        return this.foo;
    }

    public String getFrankie(){
        return this.frankie;
    }



    DispatcherServlet dispSvlt;

    WebApplicationContext wAC;


    ContextLoaderListener cntxLdrLsnr;

    AbstractApplicationContext absAC;
    Environment env;
    EnvironmentCapable envCap;
    EnvironmentAware envAwr;
    ConfigurableEnvironment cfgEnv;

    ApplicationContext aC;

    WebApplicationContext webAC;
    ConfigurableApplicationContext cfgAC;

    GenericApplicationContext gnrAC;
    GenericWebApplicationContext gnrWAC;
    ConfigurableWebApplicationContext cfgWAC;
    AbstractRefreshableApplicationContext absRefAC;
    AbstractRefreshableConfigApplicationContext absRefCfgAC;
    AbstractRefreshableWebApplicationContext absRefWAC;
    AbstractXmlApplicationContext abxXmlAC;

    DefaultListableBeanFactory defLstBnFac;

    XmlWebApplicationContext xmlWebAC;
    AnnotationConfigWebApplicationContext annoCfgWAC;
    ClassPathXmlApplicationContext clsPthXmlAC;
    FileSystemXmlApplicationContext fsXmlAC;


    //	Spring Aware标识接口
    ApplicationContextAware aCAwr;
    ApplicationEventPublisherAware appEvtPblAwr;
    BeanNameAware bnNmAwr;
    BeanClassLoaderAware bnClsLdrAwr;
    BeanFactoryAware bnFacAwr;
    EnvironmentAware envAwr2;
    MessageSourceAware msgSrcAwr;
    ResourceLoaderAware rsrcLdrAwr;
    ServletConfigAware svltCfgAwr;
    ServletContextAware svltCntxAwr;

    ConfigurableEnvironment cfgEnv2;

    ApplicationObjectSupport appObjSpt;

    EnvironmentCapable envCap2;
    EnvironmentAccessor envAcsr;
//    EnvironmentImpl envImpl;
//    EnvironmentCheck envChk;
//    Accessor acsr;

    ApplicationListener appLsnr;
    ApplicationEvent appEvt;

    ResourceLoader rsrcLdr;

    SystemEnvironmentPropertySource sysEnvPptySrc;
    PropertySource pptySrc;

//	WebSocketHandler webScktHdlr;


    BeanDefinitionReader beanDefRdr2;
    BeanDefinitionParser beanDefPsr;

    BeanPostProcessor beanPostPrcs;

    ApplicationEventMulticaster appEvtMltcstr;


    DispatcherServlet dispSvlt3;


    BeanFactory beanFac2;
    ListableBeanFactory listBeanFac;
    HierarchicalBeanFactory hieBeanFac;
    ConfigurableBeanFactory configBeanFac;


    SimpleJndiBeanFactory smpJndiBeanFac;

    ApplicationContext appCntx2;
    AutowireCapableBeanFactory awrCapbBeanFac;

    ConfigurableListableBeanFactory configListBeanFac2;
    DefaultListableBeanFactory defListBeanFac2;
    XmlBeanFactory xmlBeanFac2;

    DispatcherServlet dispSvlt2;

    InitDestroyAnnotationBeanPostProcessor initDtryAnnoBeanPostPrcs;

    AnnotationConfigWebApplicationContext annoCfgWebAC;
    AnnotationConfigApplicationContext annoCfgAC;
    XmlWebApplicationContext xmlWebAC2;

    ServletConfig svltCfg;


    @ResponseStatus
    public class HttpStatusHandlerClass{
    }

    @ExceptionHandler()
    public void ExptHndlr(){
    }

    @ControllerAdvice
    public class CtrlAdvice{
    }



    WebMvcConfigurerAdapter webMvcCfgAdpt;

    ServletResponse svltResp;
    {
        HttpServletResponse httpSvltResp;
    }

    ServletRequest svltReq;
    {
        HttpServletRequest httpSvltReq;
    }

    HttpEntity httpEntity;
    {
        ResponseEntity respEntity;
        RequestEntity reqEntity;
    }


    Filter fltr;
    {
        GenericFilterBean genericFilterBean;
        HiddenHttpMethodFilter hiddenHttpMethodFilter;
        CharacterEncodingFilter charEncodeFilter;
        HttpPutFormContentFilter httpPutFormContentFilter;
        ShallowEtagHeaderFilter shallowEtagHeaderFilter;
        RequestContextFilter reqContentFilter;
        OncePerRequestFilter oncePerRequestFilter;
        {
            CorsFilter corsFilter;
            CsrfFilter csrfFilter;
            MultipartFilter multipartFilter;
        }
    }

    EventListener evntLsnr;
    {
        AsyncListener asynclsnr;

        ServletContextListener svltCntxLsnr;
        ServletContextAttributeListener svltCntxAttrLsnr;

        HttpSessionListener httpSessLsnr;
        HttpSessionAttributeListener httpSessAttrLsnr;

        ServletRequestListener svltReqLsnr;
        ServletRequestAttributeListener svltReqAttrLsnr;
    }



    Model m;
    ModelAndView mv;
    View v;


}
